Матч
318, Наибольший прямоугольник (BiggestRectangleEasy)
Дивизион 2,
Уровень 1
У Джона есть n спичек, каждая из которых
имеет длину 1. Он хочет составить из них прямоугольник наибольшей площади.
Ломать спички нельзя. Джону не обязательно использовать все спички.
Класс: BiggestRectangleEasy
Метод: int findArea(int n)
Ограничения:
4 £ n £ 10000.
Вход. Количество спичек n, которое
имеется в наличии у Джона.
Выход. Наибольшая площадь прямоугольника, который может составить
Джон при помощи имеющихся у него спичек.
Пример входа
n |
11 |
5 |
7254 |
Пример выхода
6
1
3288782
РЕШЕНИЕ
математика
Если одна из сторон
прямоугольника равна x, то другую можно
найти по формуле:
y = (n – 2*x) / 2
Площадь полученного
прямоугольника равна S(x) = x * (n
– 2*x) / 2. Она будет наибольшей в
такой точке x, в которой S’(x) = 0. Имеем: S’(x) = (n – 4*x) / 2 = 0, x = n / 4. То есть
искомым прямоугольником будет квадрат.
Если n не делится на 4, то выполняя целочисленные деления, получим
правильный результат.
ПРОГРАММА
#include <stdio.h>
class BiggestRectangleEasy
{
public:
int findArea(int n)
{
int x = n / 4;
int y = (n - 2 * x) / 2;
return x * y;
}
};